package cn.iocoder.yudao.module.promotion.service.prizedraw;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.promotion.controller.admin.prizedraw.vo.*;
import cn.iocoder.yudao.module.promotion.controller.app.prizedraw.vo.PrizeDrawDoingReqVO;

import javax.validation.Valid;
import java.util.List;

/**
 * 抽奖活动 Service 接口
 *
 * @author 芋道源码
 */
public interface PrizeDrawService {

    /**
     * 创建抽奖活动
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPrizeDraw(@Valid PrizeDrawSaveReqVO createReqVO);

    /**
     * 更新抽奖活动
     *
     * @param updateReqVO 更新信息
     */
    void updatePrizeDraw(@Valid PrizeDrawSaveReqVO updateReqVO);

    /**
     * 获得抽奖活动
     *
     * @param id 编号
     * @return 抽奖活动
     */
    PrizeDrawRespVO getPrizeDraw(Long id);

    /**
     * 获得抽奖活动分页
     *
     * @param pageReqVO 分页查询
     * @return 抽奖活动分页
     */
    PageResult<PrizeDrawRespVO> getPrizeDrawPage(PrizeDrawPageReqVO pageReqVO);

    /**
     * 修改抽奖活动概率
     * @param chanceReqVO
     */
    void chancePreserve(PrizeDrawChanceReqVO chanceReqVO);

    /**
     * 启停
     * @param updownReqVO
     */
    void updown(PrizeDrawUpdownReqVO updownReqVO);

    /**
     * 删除
     * @param deleteReqVO
     */
    void delete(PrizeDrawDeleteReqVO deleteReqVO);

    /**
     * 抽奖活动库存
     * @param prizeDrawId
     * @return
     */
    List<PrizeDrawStoreRespVo> getStore(Long prizeDrawId);

    /**
     * 刷新每日的抽奖活动信息
     */
    void refreshPrizeDrawDaily();

    /**
     * 获取当前抽奖信息
     * @return
     */
    PrizeDrawRespVO getCurrentPrizeDraw();

    /**
     * 获取抽奖规则
     * @param prizeDrawId
     * @return
     */
    PrizeDrawRespVO getInfoById(Long prizeDrawId);

    /**
     * 进行抽奖
     * @param dto
     * @return
     */
    PrizeDrawAwardsRespVO doingPrizeDraw(PrizeDrawDoingReqVO dto);
}